package com.gjx.leetcode;

//125. 验证回文串
//给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。
//
//说明：本题中，我们将空字符串定义为有效的回文串。
//
//示例 1:
//
//输入: "A man, a plan, a canal: Panama"
//输出: true
//示例 2:
//
//输入: "race a car"
//输出: false

public class Solution125 {
	public boolean isPalindrome(String s) {
		if (s == null || s.length() == 0) {
			return true;
		}
		
		
		int i = 0;
		int j = s.length() - 1;
		
		while (i < j) {
			
			char left = ' ';
			
			while (i < j) {
				left = s.charAt(i);
				if (isValid(left)) {
					break;
				}
				i++;
			}
			
			if (i == j) {
				return true;
			}
			
			char right = ' ';
			
			while (i < j) {
				right = s.charAt(j);
				if (isValid(right)) {
					break;
				}
				j--;
			}
			
			if (i == j) {
				return true;
			}
		
			if (letter(left) != letter(right)) {
				return false;
			}
			i++;
			j--;
		}
		
		return true;
	}
	
	
	private boolean isValid(char c) {
		if (('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')) {
			return true;
		}
		return false;
	}
	
	
	private char letter(char c) {
		if ('A' <= c && c <= 'Z') {
			return (char)(c - ('A' - 'a'));
		}
		return c;
	}
}
